package com.zenithmind.news.service;

import com.zenithmind.news.mapper.NewsMapper.NewsStatistics;
import com.zenithmind.news.mapper.NewsMapper.TagStatistics;
import com.zenithmind.news.mapper.NewsMapper.NewsTrend;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 新闻统计服务接口 - 遵循接口隔离原则
 * 专门负责新闻的统计分析功能
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
public interface NewsStatisticsService {

    /**
     * 更新新闻统计信息
     * 
     * @param newsId 新闻ID
     * @param viewCount 阅读量增量
     * @param likeCount 点赞数增量
     * @param favoriteCount 收藏数增量
     * @param shareCount 分享数增量
     * @param commentCount 评论数增量
     * @return 是否成功
     */
    Boolean updateNewsStatistics(String newsId, Long viewCount, Long likeCount, 
                                Long favoriteCount, Long shareCount, Long commentCount);

    /**
     * 计算新闻热度评分
     * 
     * @param newsId 新闻ID
     * @return 热度评分
     */
    Double calculateHotScore(String newsId);

    /**
     * 批量更新新闻状态
     * 
     * @param newsIds 新闻ID列表
     * @param status 新闻状态
     * @return 是否成功
     */
    Boolean batchUpdateStatus(List<String> newsIds, Integer status);

    /**
     * 获取新闻统计信息
     * 
     * @param categoryId 分类ID
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 统计信息
     */
    NewsStatistics getNewsStatistics(String categoryId, LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 获取热门标签
     * 
     * @param limit 限制数量
     * @return 标签列表
     */
    List<TagStatistics> getHotTags(Integer limit);

    /**
     * 获取新闻趋势
     * 
     * @param days 天数
     * @return 趋势数据
     */
    List<NewsTrend> getNewsTrend(Integer days);
}
